package com.scqkzqtz.basesdk.utils;

import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import com.avos.avoscloud.AVUser;
import com.zhuge.analysis.stat.ZhugeSDK;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;

/**
 * Created by hghl on 2018/7/30.
 */

public class ZhuGeEvent {
    private static HashMap<String, String> functionCode = new HashMap<>();
    public static final String COLUNUCODE = "columnCode";

    private static void setHashMap() {
        if (functionCode == null || functionCode.size() == 0) {

        }
    }

    /**
     * 识别用户
     *
     * @param context
     */
    public static void identifyEvent(Context context) {
        if (AVUser.getCurrentUser() != null) {
            AVUser user = AVUser.getCurrentUser();
            String userid = user.get("userId").toString();
            JSONObject personObject = new JSONObject();//TODO 定义用户属性
            try {
                personObject.put("用户名称", user.getString("nickname"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
            ZhugeSDK.getInstance().identify(context, userid, personObject);//标识用户
        }
    }

    /**
     * 只传入属性名称
     * 通过属性名称匹配功能编码
     *
     * @param context c
     * @param eventName 属性名称
     */
    public static void setZhugeTrack(Activity context, String eventName) {
        setHashMap();
        if (!TextUtils.isEmpty(functionCode.get(eventName))) {
            JSONObject jsonObject = new JSONObject();
            try {
                jsonObject.put(COLUNUCODE, functionCode.get(eventName));
                ZhugeSDK.getInstance().track(context.getApplicationContext(), eventName, jsonObject);
                Log.e("ZhugeIo:", "coneStr:" + eventName + " 属性:" + jsonObject.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            ZhugeSDK.getInstance().track(context.getApplicationContext(), eventName);
            Log.e("ZhugeIo:", "coneStr:" + eventName);
        }
    }


    /**
     * 单属性
     * 通过属性值匹配功能编码
     *
     * @param context c
     * @param eventName 事件名称
     * @param Key     属性名称
     * @param Value   属性值
     */
    public static void setZhugeTrack(Context context, String eventName, String Key, String Value) {
        setHashMap();
        //定义与事件相关的属性信息
        JSONObject eventObject = new JSONObject();
        try {
            eventObject.put(Key, Value);
            if (!TextUtils.isEmpty(functionCode.get(Value))) {
                eventObject.put(COLUNUCODE, functionCode.get(Value));
            }
            Log.e("ZhugeIo:", "coneStr:" + eventName + " 属性:" + eventObject.toString());
        } catch (JSONException je) {
            je.printStackTrace();
        }
        //记录事件
        ZhugeSDK.getInstance().track(context.getApplicationContext(), eventName,
                eventObject);

    }

    /**
     * 传入多属性
     * 通过事件名称判断添加功能编码
     *
     * @param context    c
     * @param eventName    事件名称
     * @param jsonObject 属性
     */
    public static void setZhugeTrack(Activity context, String eventName, JSONObject jsonObject) {
        setHashMap();
        try {
            if (!TextUtils.isEmpty(functionCode.get(eventName))) {
                jsonObject.put(COLUNUCODE, functionCode.get(eventName));
            }
        } catch (JSONException je) {
            je.printStackTrace();
        }

        Log.e("ZhugeIo:", "coneStr:" + eventName + "  jsonObject:" + jsonObject.toString());
        ZhugeSDK.getInstance().track(context.getApplicationContext(), eventName,
                jsonObject);
    }


    /**
     * 调用endTrack()来记录事件的持续时长。调用endTrack()之前，相同eventName的事件必须已经调用过startTrack()，否则这个接口并不会产生任何事件。
     * startTrack()与endTrack()必须成对出现（eventName一致），单独调用一个接口是无效的。
     */

    /**
     * 开启时长统计
     *
     * @param eventName 事件名称
     */
    public static void startTrack(String eventName) {
        Log.e("ZhugeIo时长统计开始:", "coneStr:" + eventName);
        ZhugeSDK.getInstance().startTrack(eventName);
    }

    /**
     * 关闭时长统计
     * 单属性
     * 通过属性值匹配功能编码
     *
     * @param eventName 事件名称
     * @param Key     属性名称
     * @param Value   属性值
     */
    public static void endTrack(String eventName, String Key, String Value) {
        setHashMap();
        JSONObject pro = new JSONObject();
        try {
            pro.put(Key, Value);
            if (!TextUtils.isEmpty(functionCode.get(eventName))) {
                pro.put(COLUNUCODE, functionCode.get(eventName) + "");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Log.e("ZhugeIo:时长统计结束:  " + eventName, pro.toString());
        ZhugeSDK.getInstance().endTrack(eventName, pro);
    }

    /**
     * 关闭时长统计
     * 多属性
     * 通过事件名称匹配功能编码
     *
     * @param eventName 事件名称
     * @param jsonObject 属性
     */
    public static void endTrack(String eventName, JSONObject jsonObject) {
        try {
            if (!TextUtils.isEmpty(functionCode.get(eventName))) {
                jsonObject.put(COLUNUCODE, functionCode.get(eventName) + "");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        ZhugeSDK.getInstance().endTrack(eventName, jsonObject);
    }

}
